Registry pages: capture enumerable sources completely, one cited row per entry - #134
Merged
Merged
Conversation
…per entry A source that is (or contains) a uniform enumeration of like entries — a machine inventory, an error-code catalog, a customer roster, a price list — used to come out as a representative subset with the tail compressed into one footnote (the kelvarra Sundries defect). The rules actively demanded it: the granularity floor prefers fewer dense pages, essence-not-structure discards enumerable data, and meeting-minutes routes perennial reference tables to "ordinary facts" with no aggregate destination. New `Registry` type (folder `registries/`): one page per collection, one bullet per entry with the entry's source-verbatim key in bold and its own citation at the finest available locator. The granularity floor is unchanged — an entry earns its own page (of its own kind) only past several independent cited facts, and its row becomes key + link + one-line gloss. Delivered as rules text (new `genres/registry.md`, a `Registry` row + decision step + `## Registries` contract in schema.md, floor/essence carve-outs in core.md, the meeting-minutes reroute, reconcile keep-treatment) plus two code touches: the `okf.folder_for_type` mapping (same commit as the rules text, or the misc-fallback + curate resort would relocate every registry page) and a type-aware curate length guidance (an oversized registry splits by entry range/subclass into sibling registries, never along topics). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X8L1A9vAa2WJKemtM21uR9
The tenth corpus and the graded proof for the Registry feature: a 28-machine register (>200 lines, so per-row line locators are required), a 20-code fault catalogue (near-miss E-142 vs E-412, a deprecated E-155 -> E-310 hand-over), a 15-customer CSV (the data-not-code boundary), and a June 2026 service report that drives promotion (PV-014 -> objects/, Nordwerk -> organizations/), a dated HX-201 status supersession, attributed opinions, and a done-able open-items list that must land in Open Points, never in a registry. Hidden answer key at .claude/skills/verify-corpus/werkhof/ground-truth.md (outside the corpus); verify-corpus SKILL.md, CLAUDE.md, and the CI corpus floors (9 -> 10) updated. The committed showcase wiki follows in the next commit, generated by a real graded ingest run. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X8L1A9vAa2WJKemtM21uR9
There was a problem hiding this comment.
Pull request overview
Introduces a new Registry page kind to ensure uniform enumerations (inventories, catalogs, rosters, code lists) are captured completely in the wiki with one cited row per entry, and adds a new graded corpus (werkhof) to validate this behavior end-to-end.
Changes:
- Add
Registryas an OKF page type (rules + folder routing inokf.folder_for_type) and update curate guidance so oversized registries split by key range/subclass rather than topic. - Add/extend rules docs (
schema.md,core.md,genres/registry.md, and related briefs) to enforce per-entry citations, completeness, and promotion semantics. - Add the new
corpora/werkhoftest corpus plus verify-corpus ground truth, and update CI/pages corpus floors to expect 10 corpora.
Reviewed changes
Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
tests/test_okf.py |
Adds routing tests for Registry → registries/ paths. |
tests/test_curate.py |
Adds tests ensuring registry pages aren’t resort-flagged and that length guidance is registry-specific. |
README.md |
Documents the new registries/ wiki folder. |
corpora/werkhof/README.md |
Documents the new corpus goals and expected registry/promotion outcomes. |
corpora/werkhof/raw/wartungsbericht-2026-06.md |
New prose source driving promotion, supersession, and open-points vs registry judgment. |
corpora/werkhof/raw/stoercode-katalog.md |
New enumerated fault-code catalog source (registry completeness + near-miss keys). |
corpora/werkhof/raw/maschinenbestand-2026.md |
New enumerated machine register source (registry completeness + per-row locators). |
corpora/werkhof/raw/kundenliste.csv |
New CSV roster source to grade “data rows are content” behavior. |
corpora/werkhof/citadel.toml |
Adds corpus workspace marker. |
corpora/werkhof/.citadel_run.lock |
Adds a runtime lockfile (should not be committed; blocks runs after checkout). |
CLAUDE.md |
Updates documentation to include the 10th corpus and werkhof in verify-corpus usage. |
citadel/rules/tasks/reconcile.md |
Extends “keep existing genre treatment” to include registry row lists. |
citadel/rules/schema.md |
Adds Registry to the type table and decision procedure; documents registry format contract. |
citadel/rules/README.md |
Indexes registries in the rules summary and adds the new genre brief. |
citadel/rules/genres/registry.md |
New genre brief defining completeness, per-row citations, promotion, and splitting guidance. |
citadel/rules/genres/meeting-minutes.md |
Routes perennial reference tables to registry treatment when uniformly enumerable. |
citadel/rules/core.md |
Clarifies that the granularity floor limits pages not rows; datasets aren’t “code structure.” |
citadel/okf.py |
Adds Registry → registries folder mapping. |
citadel/curate.py |
Makes page-length findings guidance type-aware for Registry. |
CHANGELOG.md |
Documents the Registry feature and its known limitation for oversized chunked sources. |
.github/workflows/pages.yml |
Bumps expected minimum corpus count from 9 → 10 for Pages build. |
.github/workflows/ci.yml |
Bumps expected minimum corpus count from 9 → 10 for showcase lint gating. |
.github/copilot-instructions.md |
Regenerates instructions to reflect the 10th corpus and updated verify-corpus usage. |
.claude/skills/verify-corpus/werkhof/ground-truth.md |
Adds the werkhof grading answer key. |
.claude/skills/verify-corpus/SKILL.md |
Updates verify-corpus skill docs to include werkhof and “ten corpora”. |
The committed showcase generated by a real sonnet Mode A run under the new Registry rules: three type: Registry pages under registries/ carrying every machine, fault code, and customer as its own cited row (line locators, 0 locator issues), PV-014/HX-201/Nordwerk promoted with rows reduced to key + link + gloss, the HX-201 status supersession as a dated trace, the report's done-able items as Open Points, and mid-list keys retrievable top-1 through citadel search. check and lint both exit 0. Also: drop the accidentally committed corpora/werkhof/.citadel_run.lock (a runtime artifact snapshotted while the ingest was still running) and gitignore citadel's runtime artifacts so it cannot recur; record the run and move VCB-005 (the kelvarra Sundries compression defect this feature fixes) to Resolved in docs/verify-corpus-backlog.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X8L1A9vAa2WJKemtM21uR9
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 39 out of 40 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
citadel/okf.py:187
- The docstring references
rules/genres/registry.md, but the rules files are generally referenced by their path within the rules tree (e.g.core.md,schema.md,genres/...). Usingrules/...here is inconsistent and may be misleading for readers trying to locate the file.
``System``). ``Registry`` is a complete enumeration of like entries captured row-by-row from
a source (a machine inventory, an error-code catalog, a customer roster — see
``rules/genres/registry.md``). ``Person``/``Organization``/``Project`` replace the old
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Sources that are (or contain) a uniform enumeration of like entries — machine inventories, error-code catalogs, customer rosters, product/price lists — used to come out as a representative subset with the tail compressed into one footnote (live example: the kelvarra showcase's
organizations/instrument-works.mdpresses 5 "Sundries" products into a single[^s9]). The rules actively demanded that compression: the granularity floor prefers fewer dense pages, "essence, not structure" discards enumerable data, andmeeting-minutes.mdroutes perennial reference tables to "ordinary facts" with no aggregate destination.This PR adds the
Registrypage kind: one page per collection under the newwiki/registries/folder, one bullet per entry with the entry's source-verbatim key in bold and its own citation at the finest available locator — and promotion: an entry that accumulates several independent cited facts (the unchanged granularity floor) moves to its own page of its own kind, its registry row becoming key + link + one-line gloss.How
Almost all of it is rules text (the runtime program):
citadel/rules/genres/registry.md— applies-when test ("entries share one attribute shape, and a reader would ask is X on the list?"), completeness-over-compression (WRONG→RIGHT built on the Sundries defect), row shape + key identity + search-before-append, spreadsheet sheet-marker rule, promotion, per-row reconcile/Change-Log behavior, range-split (never topic-split) guidance, and an explicit negative list (Open Points, chat/event streams, code symbols, bibliographies, abbreviations).schema.md—Registryrow in the type table, decision-procedure step 7 (before Concept, after Object — so a single rich machine still matches Object first, which is the promotion semantics), and a compact## Registriesformat contract.core.md— two carve-outs: the floor limits pages, not rows; data rows are not code structure.meeting-minutes.md— perennial reference tables now route to the registry brief;tasks/reconcile.mdkeeps registry row lists as genre treatment; rulesREADME.mdindexed.Two small code touches:
okf.py—"registry": "registries"infolder_for_type(same commit as the rules text: the misc-fallback plus curate'sresortdetector would otherwise relocate every registry page each run).curate.py— thepage_length_hardguidance is now type-aware: an oversized registry is told to split by entry range/subclass into sibling registries, never along topics (the detector itself is unchanged).Everything else (per-folder index, viewer,
type:registrysearch, MCP resources, curate resort) is data-driven and picks the new type up automatically.New graded corpus: werkhof — and its committed showcase run
Per the project's "every capability is graded" pattern:
corpora/werkhof/(fictional maintenance firm, Werkhof Anlagenservice Brandt) — a 28-machine register (>200 lines ⇒ per-rowlines A-Blocators required), a 20-code fault catalogue (near-miss E-142 vs E-412, deprecated E-155→E-310), a 15-customer CSV (the data-not-code boundary), and a service report driving promotion, a dated HX-201 status supersession, attributed opinions, and a done-able open-items list (Open Points, never registry rows). Hidden answer key at.claude/skills/verify-corpus/werkhof/ground-truth.md; SKILL.md/CLAUDE.md/CI corpus floors updated.The committed showcase wiki was generated by a real sonnet Mode A run under the new rules and graded against the full answer key — PASS on every guarantee (run block in
docs/verify-corpus-backlog.md): threetype: Registrypages carrying 28/28 machines, 20/20 fault codes, 15/15 customers, one citation per row with offline-verifying locators (lint locator issues: 0), promotion toobjects//organizations/with rows reduced to key + link + gloss, the status supersession as a dated trace, open items as## Open Points, and mid-list keys (KP-011,E-420,K-009) retrievable top-1 throughcitadel search.checkandlintboth exit 0. The kelvarra Sundries defect is recorded and resolved as VCB-005 in the ledger.Known limitation (documented in CHANGELOG)
A list source over
CITADEL_MAX_SOURCE_CHARS(~300k chars) chunks through segment files whose line numbers rebase, so per-rowlines A-Blocators of such oversized lists are not offline-verifiable yet. v1 registries (tens to a few hundred entries) sit far below the threshold; the future fix is the_line_windowstrue-offset approach already used for audio/PDF.Tests
tests/test_okf.py— Registry routing (+ the misc-fallback pins stay).tests/test_curate.py— Registry inregistries/is notresort-flagged (while the same type mis-filed is), and the length guidance splits by range for registries, by topic for everything else.🤖 Generated with Claude Code
https://claude.ai/code/session_01X8L1A9vAa2WJKemtM21uR9